package lvm.fonctions.prim.subr;

import lvm.fonctions.prim.Primitive;
import lvm.fonctions.prim.fsubr.Quote;
import lvm.struct.Liste;
import lvm.struct.Sexpr;
import lvm.struct.Symbole;
import lvm.Contexte;
import lvm.LvmException;

public class Cdr extends Subr {
	public static final Cdr CDR = new Cdr();

	/**
	 * Constructeur de la classe Cdr
	 */
	public Cdr() {
		super("cdr");
	}

	public Sexpr exec(Sexpr arg) throws LvmException {
		// On sélectionne l'unique paramètre de la fonction
		arg = arg.getCar();
		
		if (arg instanceof Liste && arg.getCar() instanceof Symbole) {
			Primitive p = Contexte.getContexteCourant().getPrimitive((Symbole) arg.getCar());
			if (p instanceof Quote)
				return arg.getCdr().getCdr();
		}

		return arg.eval().getCdr();
	}
}
